/*-----------------------------------------------File Info------------------------------------------------
** File Name:               bspGPIO.c  
** Last modified date:      20220724
** Last version:            V0.1
** Description:             
*/

#ifndef __BSP_GPIO_H_
#define __BSP_GPIO_H_

#include <stdint.h>
#include <stdio.h>

#include "bspConfig.h"


//#define GPIO_A3 {RCU_GPIOA, GPIOA, GPIO_PIN_3, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_AF_1, 1/*RX*/}
		
typedef struct 
{
	rcu_periph_enum gpioRcu;	//RCU_GPIOAx	
	uint32_t gpioPeriph;		//GPIOx
	uint32_t pin;				//GPIO_PIN_x
	uint32_t mode;				//GPIO_MODE_INPUT,GPIO_MODE_OUTPUT,GPIO_MODE_AF,GPIO_MODE_ANALOG
	uint32_t pull;				//GPIO_PUPD_NONE,GPIO_PUPD_PULLUP,GPIO_PUPD_PULLDOWN
	uint32_t otype;				//GPIO_OTYPE_PP,GPIO_OTYPE_OD
	uint32_t speed;				//GPIO_OSPEED_2MHZ,GPIO_OSPEED_10MHZ,GPIO_OSPEED_50MHZ
	uint32_t af;				//GPIO_AF_x
	uint8_t value;				//默认值0，1
}tsCfgGpio;

typedef struct 
{   
	rcu_periph_enum gpioRcu;	//RCU_GPIOAx	
	uint32_t gpioPeriph;		//GPIOx
	uint32_t pin;				//GPIO_PIN_x
	uint32_t mode;				//GPIO_MODE_INPUT,GPIO_MODE_OUTPUT,GPIO_MODE_AF,GPIO_MODE_ANALOG
	uint32_t pull;				//GPIO_PUPD_NONE,GPIO_PUPD_PULLUP,GPIO_PUPD_PULLDOWN
	uint32_t otype;				//GPIO_OTYPE_PP,GPIO_OTYPE_OD
	uint32_t speed;				//GPIO_OSPEED_2MHZ,GPIO_OSPEED_10MHZ,GPIO_OSPEED_50MHZ
	uint32_t af;				//GPIO_AF_x
}tsCfgGpioInt;

extern void gpioConfig(tsCfgGpio *cfg);
extern void gpioWrite(tsCfgGpio *cfg, uint8_t val);
extern uint8_t gpioGetInput(tsCfgGpio *cfg);
extern uint8_t gpioGetOutput(tsCfgGpio *cfg);
extern void gpioToggle(tsCfgGpio *cfg);
#endif



